//
// File:	ISound.hpp
// Author:	Thomas TISSOT-DUPONT
// Login:	<thomas.tissotdupont@free.fr>
//
// Created:	28/04/2010 at 02:28:11
// Purpose:	
//
#ifndef ISOUND_HPP
#define ISOUND_HPP

#include <string>
#include "Event.hpp"

class ISound
{
public events:
	Event<void (ISound *)>	OnPlayed;
	Event<void (ISound *)>	OnStopped;
	Event<void (ISound *)>	OnPaused;
	Event<void (ISound *)>	OnMuted;
	Event<void (ISound *)>	OnUnmuted;
	Event<void (ISound *)>	OnUpdated;

public:
	virtual					~ISound() {}

public:
	virtual bool			LoadFromFile(const std::string &filename) = 0;

public:
	virtual void			Play() = 0;
	virtual void			Stop() = 0;
	virtual void			Pause() = 0;

public:
	virtual void			Mute() = 0;
	virtual void			UnMute() = 0;

public:
	virtual void			Update() = 0;

public:
	virtual void			Remove() = 0;
	virtual bool			IsRemoved() const = 0;

public:
	virtual void			SetLoop(bool) = 0;

public:
	virtual void			SetX(float) = 0;
	virtual void			SetY(float) = 0;
	virtual void			SetVolume(float) = 0;
	virtual void			SetSpatializable(bool) = 0;
	virtual float			GetX() const = 0;
	virtual float			GetY() const = 0;
	virtual float			GetVolume() const = 0;
	virtual bool			IsSpatializable() const = 0;
};

#endif //!ISOUND_HPP
